// combineReducers 用来合并你拆分出来的若干个小的reducer模块
//  + 参数为一个对象
//    key: 在调用state时的对象前缀 key:user   => state.user.xx
//    value: 拆分出来小的纯函数reducer
import {
  legacy_createStore as createStore,
  applyMiddleware,
  combineReducers
} from 'redux'
import { thunk } from 'redux-thunk'
import { composeWithDevTools } from '@redux-devtools/extension'

// 导入拆分出去的reducer纯函数
// import num from '../reducers/num'
// const reducer = combineReducers({
//   num
// })

// 当前的工程化环境为【webpack】，它有一个内置方法用来进行目录检索
// 参数1：要检索的目录相对地址
// 参数2：是否要递归检索 true是，false否
// 参数3：正则，用来过滤需要检索的文件类型
// 返回值为是一个函数，此函数就是一个导入数据
// 函数有一个静态方法为keys,则为检索到的文件列表，类型为数组
const moduleFn = require.context('../reducers', false, /\.js$/i)
const modules = moduleFn.keys().reduce((prev, curr) => {
  const key = curr.match(/\.\/(\w+)\.js$/i)[1]
  const value = moduleFn(curr).default
  prev[key] = value
  return prev
}, {})

const reducer = combineReducers(modules)

const store = createStore(reducer, composeWithDevTools(applyMiddleware(thunk)))

export default store
